import axios from 'axios';
// 导入pinia仓库的方法
import { useUserStore } from '@/stores/user';
// 导vant的提示组件
import { Toast } from 'vant';
// 导入路由
import router from '@/router';
// 封装网络请求
// api的请求基地址封装
export const baseURL = 'https://consult-api.itheima.net/';
// 请求超时的封装
export const instance = axios.create({
  baseURL,
  timeout: 10000,
});
// 配置请求拦截器（在发送请求之后先走请求拦截器然后再到服务器）
instance.interceptors.request.use(
  (config) => {
    // 给所有网络请求添加 token
    const token = useUserStore().user?.token;
    if (token && config.headers) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    // 返回配置后的config
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);
// 配置响应拦截器（服务器做出响应之后走响应拦截器然后再去往浏览器项目）
instance.interceptors.response.use(
  (res) => {
    // 业务逻辑失败的统一处理
    if (res.data.code !== 10000) {
      Toast(res.data.message);
      return Promise.reject(res.data);
    }
    // 注意剥离后，网络的业务请求封装函数的返回数据要改一下
    return res.data;
  },
  (err) => {
    if (err.response.status === 401) {
      // 删除用户信息
      const store = useUserStore();
      store.serveUser();
      // 跳转登录，带上接口失效所在页面的地址，登录完成后回跳使用
      router.push(`/login?returnURL=${router.currentRoute.value.fullPath}`);
    }
    return Promise.reject(err);
  }
);
